import launch
import launch_ros
from ament_index_python.packages import get_package_share_directory
import os
def generate_launch_description():
    #获取默认的urdf路径--通过CMakeLists.txt安装
    urdf_package_path = get_package_share_directory('fishbot_description')
    default_urdf_path = os.path.join(urdf_package_path, 'urdf', 'first_robot.urdf')
    default_rviz_config_path = os.path.join(urdf_package_path, 'config', 'display_robot_model.rviz')
    
    #声明一个urdf目录参数，方便修改，launch参数
    action_declare_arg_mode_path = launch.actions.DeclareLaunchArgument(
        name='model', default_value= str(default_urdf_path), description='加载的模型文件路径'
    )

    #通过文件路径，获取内容用cat命令，并转换成参数值对象，以供传入robot_state_publisher
    substitutions_commond_result = launch.substitutions.Command(['cat ', launch.substitutions.LaunchConfiguration('model')])
    robot_description_value= launch_ros.parameter_descriptions.ParameterValue(substitutions_commond_result, value_type=str)
    
    #启动节点,状态发布节点
    action_robot_state_publisher = launch_ros.actions.Node(
        package='robot_state_publisher',
        executable ='robot_state_publisher',
        parameters =[{'robot_description':robot_description_value}]
    )
    #启动节点,关节状态发布节点
    action_joint_state_publisher = launch_ros.actions.Node(
        package='joint_state_publisher',
        executable ='joint_state_publisher',
       
    )
    #rviz2启动
    action_rviz_node = launch_ros.actions.Node(
        package='rviz2',
        executable ='rviz2', 
        arguments =['-d', default_rviz_config_path]      
    )

    return launch.LaunchDescription([
        action_declare_arg_mode_path,
        action_robot_state_publisher,
         action_joint_state_publisher,
        action_rviz_node 

    ])